{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 53,
   "source": [
    "import pandas as pd\r\n",
    "import numpy as np\r\n",
    "import matplotlib.pyplot as plt\r\n",
    "%matplotlib inline\r\n",
    "\r\n",
    "from sklearn import tree\r\n",
    "from sklearn import metrics\r\n",
    "from sklearn.model_selection import train_test_split\r\n",
    "plt.rcParams['font.sans-serif']=['Simhei']\r\n",
    "plt.rcParams['axes.unicode_minus']=False\r\n",
    "plt.rcParams['font.size']=18"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "source": [
    "df = pd.read_excel(\"./data/dataset.xls\", engine=\"xlrd\")\r\n",
    "data = df.drop(columns=[\"是否窃漏电\"])\r\n",
    "target = df[\"是否窃漏电\"]\r\n",
    "feature_name = list(data.columns)\r\n",
    "label_name = target.name\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "source": [
    "df.describe()"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>电量趋势下降指标</th>\n",
       "      <th>线损指标</th>\n",
       "      <th>告警类指标</th>\n",
       "      <th>是否窃漏电</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>291.000000</td>\n",
       "      <td>291.000000</td>\n",
       "      <td>291.000000</td>\n",
       "      <td>291.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2.718213</td>\n",
       "      <td>0.512027</td>\n",
       "      <td>1.171821</td>\n",
       "      <td>0.137457</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2.091768</td>\n",
       "      <td>0.500716</td>\n",
       "      <td>1.065783</td>\n",
       "      <td>0.344922</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         电量趋势下降指标        线损指标       告警类指标       是否窃漏电\n",
       "count  291.000000  291.000000  291.000000  291.000000\n",
       "mean     2.718213    0.512027    1.171821    0.137457\n",
       "std      2.091768    0.500716    1.065783    0.344922\n",
       "min      0.000000    0.000000    0.000000    0.000000\n",
       "25%      1.000000    0.000000    0.000000    0.000000\n",
       "50%      3.000000    1.000000    1.000000    0.000000\n",
       "75%      4.000000    1.000000    2.000000    0.000000\n",
       "max     10.000000    1.000000    4.000000    1.000000"
      ]
     },
     "metadata": {},
     "execution_count": 55
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 1 分割数据集"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\r\n",
    "    data, target, test_size=0.3, random_state=42\r\n",
    ")\r\n",
    "\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "source": [
    "# 正反标签存在不均衡的情况\r\n",
    "p_ratio = y_train[y_train == 1].shape[0] / y_train.shape[0]\r\n",
    "n_ratio = y_train[y_train == 0].shape[0] / y_train.shape[0]\r\n",
    "p_ratio, n_ratio\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "(0.12315270935960591, 0.8768472906403941)"
      ]
     },
     "metadata": {},
     "execution_count": 58
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 2 使用CART决策树（分类树）进行建模"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.1 初步探索"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "source": [
    "clf = tree.DecisionTreeClassifier(\r\n",
    "    criterion=\"gini\",\r\n",
    "    random_state=450,\r\n",
    "    max_depth=3,\r\n",
    "    min_samples_leaf=3,\r\n",
    "    class_weight={0: 0.12, 1: 0.88},\r\n",
    ")\r\n",
    "clf = clf.fit(X_train, y_train)\r\n",
    "\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "source": [
    "y_pred = clf.predict(X_test)\r\n",
    "cm = metrics.confusion_matrix(y_test, y_pred, labels=clf.classes_)\r\n",
    "accuracy = metrics.accuracy_score(y_test, y_pred)\r\n",
    "precision = metrics.precision_score(y_test, y_pred)\r\n",
    "recall = metrics.recall_score(y_test, y_pred)\r\n",
    "\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.2 绘制混淆矩阵"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "source": [
    "import itertools\r\n",
    "\r\n",
    "\r\n",
    "def plot_confusion_matrix(\r\n",
    "    cm, classes, figsize=(9, 6), title=\"confusion_matrix\", cmap=plt.cm.Blues\r\n",
    "):\r\n",
    "    plt.figure(figsize=figsize)\r\n",
    "    plt.imshow(cm, interpolation=\"nearest\", cmap=cmap)\r\n",
    "    if title and title.strip():\r\n",
    "        plt.title(title)\r\n",
    "    tick_marks = np.arange(len(classes))\r\n",
    "    plt.xticks(tick_marks, classes, rotation=0)\r\n",
    "    plt.yticks(tick_marks, classes)\r\n",
    "    thresh = cm.max() / 2\r\n",
    "    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\r\n",
    "        plt.text(\r\n",
    "            j,\r\n",
    "            i,\r\n",
    "            cm[i, j],\r\n",
    "            ha=\"center\",\r\n",
    "            va=\"center\",\r\n",
    "            color=\"white\" if cm[i, j] > thresh else \"black\",\r\n",
    "        )\r\n",
    "    plt.xlabel(\"Predicted label\")\r\n",
    "    plt.ylabel(\"True label\")\r\n",
    "    plt.tight_layout()\r\n",
    "    plt.show()\r\n",
    "    pass\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "source": [
    "classes = clf.classes_\r\n",
    "plot_confusion_matrix(cm, classes)\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 648x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.3 进行网格搜索和交叉验证"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "source": [
    "# 模型判断是用户是否是窃漏电，精确度和召回率都比较重要，使用F1指标来平衡两者\r\n",
    "from sklearn.model_selection import GridSearchCV\r\n",
    "\r\n",
    "parameters = {\r\n",
    "    \"max_depth\": list(range(1, 11)),\r\n",
    "    \"min_samples_leaf\": list(range(1, 11)),\r\n",
    "    \"class_weight\": [{0: 0.13, 1: 0.87}, \"balanced\"],\r\n",
    "    \"criterion\": [\"entropy\", \"gini\"],\r\n",
    "}\r\n",
    "clf = tree.DecisionTreeClassifier(random_state=450)\r\n",
    "# metrics.SCORERS.keys()\r\n",
    "grid_search = GridSearchCV(\r\n",
    "    clf, param_grid=parameters, cv=5, scoring=\"f1\", n_jobs=3, return_train_score=True\r\n",
    ")\r\n",
    "grid_search.fit(X_train, y_train)\r\n",
    "\r\n",
    "grid_search.best_params_, grid_search.best_estimator_, grid_search.best_score_\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "({'class_weight': {0: 0.13, 1: 0.87},\n",
       "  'criterion': 'entropy',\n",
       "  'max_depth': 2,\n",
       "  'min_samples_leaf': 3},\n",
       " DecisionTreeClassifier(class_weight={0: 0.13, 1: 0.87}, criterion='entropy',\n",
       "                        max_depth=2, min_samples_leaf=3, random_state=450),\n",
       " 0.7272727272727273)"
      ]
     },
     "metadata": {},
     "execution_count": 116
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.4 使用网格搜索的结果建模"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "source": [
    "clf = tree.DecisionTreeClassifier(random_state=450, **grid_search.best_params_)\r\n",
    "clf = clf.fit(X_train, y_train)\r\n",
    "y_pred = clf.predict(X_test)\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.5 生成混淆矩阵"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "source": [
    "cm = metrics.confusion_matrix(y_test, y_pred, labels=clf.classes_)\r\n",
    "accuracy = metrics.accuracy_score(y_test, y_pred)\r\n",
    "precision = metrics.precision_score(y_test, y_pred)\r\n",
    "recall = metrics.recall_score(y_test, y_pred)\r\n",
    "feature_importances = [*zip(feature_name, clf.feature_importances_)]\r\n",
    "\r\n"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "source": [
    "accuracy, recall, precision\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "(0.8295454545454546, 0.6, 0.5)"
      ]
     },
     "metadata": {},
     "execution_count": 120
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "source": [
    "# 特征重要度\r\n",
    "feature_importances "
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "[('电量趋势下降指标', 0.5667675114482048),\n",
       " ('线损指标', 0.0),\n",
       " ('告警类指标', 0.4332324885517951)]"
      ]
     },
     "metadata": {},
     "execution_count": 121
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "source": [
    "plot_confusion_matrix(cm, classes=[0, 1])\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAGXCAYAAACwZOuLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgmUlEQVR4nO3debhbVb3/8fcXaKGU1kKLiEwFlOmKoBYQLoVCRQrIoIViGQtqnS76w3txQL1WJgFFQRAQ8FIBlRlBJkFoKZNoBQQnxpZBkKlMpYMtrN8fex9IwzmnJ22S3Z71fj1PnjRrr+z9TXL6yc7aKzuRUkKS1PstU3UBkqT2MPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4KvtIqJvREyIiEciYl5EPBcRp7Rx+0MjIkXExHZtMxcRMbF8bodWXYvebrmqC1CWjgX+B7gBuBR4J/AflVYkZSD84pXaLSKeBOaklN5T0xapTX+MEdEHWB94OaX0dDu2uSSJiBHAJOCQlNLEJq97deAdwCMppXnNXLcWn3v4qsIawC21De0K+3Jb84B/tGt7OSnfQLN7E11aOIYvSZkw8DMTEatHxFkR8XREvBYR90XEV8phjtp+m0fEVRHxckTMjIjfRcS2dX3GlQfoxkXEB8o+r0bEkxFxUkT0rek7vezbsSe/fcft+oN8Zd/JndS+bcf26tq3i4gbI+KZstY/R8Tnu3kOenTQNiLGl8/PnIh4KiJOi4jBdX0mdzymiPhCRDwYEbPK++3W3fq72W4q13tYRPyrfK1Glet/tmwbU9N/2bLvn8vH/1RE/DoiNunkMSeK4RyAc2ue/+md1PHmAdiIWC0iTomIRyPirG5q7/KgbUQsExF3RMTrETGspn2ViHi+PHg/ZFGeM/WMQzoZiYh1gDuAdwO/Bf4GjABOArYD9ir7jQSuptghuAT4N7A3MCki9k8pXVy36vcDpwJ3AecC+wJfAV4Ajiv7nAqsXP77m8DjwPk163hpER/T1sDvgJeBy4DXgJ2A0yNihZTSjxZxvWcBnwEeBc4BNgK+CIyKiG1SSs/W9T+K4jH/ChgIjAEui4iNU0rTFqGEDwFrAtcB44BfULwOl5V1nQR0vA4/BL4E3A+cVW5/X+CmiPiPlNIMiuf32LL/OsABwG+A+8q2F7upZT2K12oIcC/wxCI8HlJKb0TEp4B7gFPL5zEBRwGDgbEppecXZd3qoZSSl0wuwLVAAr5Y07Ys8PuyfStgBeApinDZqqbfeylC9VVgSNk2rrzfG8DRNX03L9vv6qKOBEzups7pnS0Hti3vO66m7eSybXhN2/IUb2ZXdLH+oeV9JnaxfI9y+R1A/5r2r5XtF9a0TS7bXgE266Suzy/C65TK53/t8vaMsu3D5e27eeuwx6Cy70PACjXrGF3e54BO1j+i/nnsoo6JZb9pFG80q/ag9o77DO2mz5Fln4OBTYH5wJVV///I4eKQTiYiYhVgFPAgcHpHe0rpdeBzwFiKoP8osDpwQUrprpp+DwGnACtR7O3XegT4bk3fe4HnKKZbttoz5fXmNdufm1LaJKX08UVc57jy+usppddq2n9A8WY0OiIG1N3npJTSn2tu31BeL+pzcH9K6fHy368AM1JKv6+5DUBK6aWUUt+U0ntTSnMAImItijdHgHUXcfu1ZgL7pZSea8K6AE6k+KRwPMXf4kygyyE4NY+Bn4/3AgH8JZW7WR1SSvemlC5MKT1BMXQBxcfueveW1xvXtV+WUppf1zar3F4zLdtJ25kUe7c/Lseur4mIb0bE+ouxnU6fg/LN8X6KodD31N3norrbs8rrRX0OXl3I7TdFRP+IODwiro6If1EMl32pXNzZc9aob6WU5jZhPQCUfyuHAqtSvDEdkVJ6qlnrV9cM/Py8bfpjeTBthYhYju4Dqqupk482pbKFG1rfkFJ6EXgfxfGHiRRh/G3gHxGxzyJuZ0l+DhZQfnK7n2JMvy9wBsVzsXUTN/PnhXdp2Nq89WbUjE8h6gEDPx8PUYTV+zpZNhqYTfFR++9l2+ad9PtAef33uvZ/N6G+WonOJxR8pL4hIjYFNkopXZlSOjKltDOwAcWwxwmLuP1On4OIWIbiAPV84OEFCk6p2c9BT32WIjD/O6X00ZTSd1NKVwKvd3OfN9pTWufKmTg/pXgOrwK+GhFbVVlTLgz8TKRipsZ1wIadTFn8ZHk9mWLs+WngwNr/hBHxXuDLFOOtl7a43GeBDeqmdW4J7NdJ33OAP0VE7Vj5Pylmnay2iNufWF6fEBH9a9qPoPiUcVlKqcshljZ7V3ndMd5PRKwG/KSb+0wvr9erbSw/4bXD6RSvzXiK40czgZ9HRL82bT9bTsvMyxcpZp6cHhF7UHzbdFtgGHAN8JuUUoqIAymmZd4SEZcCc4F9gBUpDt61eurc5RQH9M6JiNMpzrNzIsUso4/V9T2LIvTvjohrKMa6h1OcOuHni7LxlNJVEXE2xfTH+yLiOmBDik8Yj/DW+PiS4EaKek6PiOEU0xv34K09/EH1d0gpPV5+z+GI8s3hZWATir+H/2llsRHxSYq/pZ+llCaVbV+nGIo6Dji8ldvPXtXThLy090IxA+ds4F8UQzEPAt8A+tT125zi4/bLFHtgvwO2reszji6m91HsRU7vooaFTcvsQzEc8yTFwc97KGYRvW1aZtl/L+Dm8jHNphiSORJYvov1D6WbaZk1/cZTzFOfSzGD6SfA4Lo+kymnSNa1jyi3MWERXqMFnp/657J+mxTTG+8H5pR1nklxkH4OxbBJ3062sSrFdyaeBuaV2zi4rs9EFjLFspP1dnkfik8jz5ev08o17QHcSjHUtH3V/0d688WTp0lSJhzSkVosIgbR86GSm1NKN7ewHGXMwJdabxDF6SR6Yj7F8JTUdA7pSFImnJYpSZkw8CUpE0vNGH4s1y9F3/rzVUnVev9Ga1VdgrSAJx5/jBeef77T04MsPYHfdwDLbzhm4R2lNrrp1pOrLkFawMjhXZ+lwiEdScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgZ+BnbbZmNn3nMbonT7QZZ9DP/GfzL7ntDZWpdzNnTuX7x09gWGbbsgag1dil5HDuf3WKVWX1asZ+L1cvxX6cMo39mXSXQ9w2Y33dNpntcEDOObLe7a5MuXu0wfvx2kn/4CPjx7DsSf+kHnz5jF69525ZdJNVZfWa1US+BExIiKmRsSsiJgSEetXUUcOvvXZXVljtUEcfsLFXfb54df24R0rrdDGqpS726bcwnVXX8UJP/wx35xwNOM+NZ4rr7uJ1d+9Bscd9b9Vl9drtT3wI2IL4HpgeeBIIAHXRsTy7a6lt3vfe9/NYfvvyKkXTOKBac902mfX7d7HXiM35+dX/r7N1Slnt06+mb59+zJ6zNg32/r378/2O47kr/ffV2FlvVsVe/jfB14Ctk8pnQzsCgwExldQS6/2k2+NZebsudxx7yPsvO0mrPKO/gssX2nF5TnlG/ty1iW3ccc9j1RUpXL06quvsEK/fvTr12+B9jmzZ9NvxRUrqqr3a2vgR8TKwHDg3JTSDICU0mvAhYCDyE20/+5bseX712XlgSty5oT9+dX3P80D1x7FJ3cZ9mafow7bg5QS3/7xlRVWqhwNXXc9Xnn5Zf76l7f25mfOnMmUSTez5Ye3qbCy3q3de/gbl9u8ra79PmCzNtfSqx35mVH8e9589jrsdNbe8RusPfIbXD35Ps4+6kA232hNttx0KOP3Gc5/HXshM2fNrbpcZWb0mLGsvMoqjB93ILffOoW7p/6Bg8fuzbPPPsP+B46rurxea7k2b29QeT29rv05YEhErJBSmtPRGBHj6Rjq6bNSG8rrHTYYuhrrrbUq515xB7+97W8AzJw1ly8ddxFjRn2I/Xbbkh222oiLrpvKDbf/reJqlaPBQ4ZwxTU3cNhnP8Weu4x8s33DjTZh1G67V1hZ79buPfwor2fVtXeE/IDaxpTSWSmlYSmlYbFcP9Qzq7yjGAO99U8PLdD+6mtzeO7FmXxxvxGs+a5BHH/O9Qwe1J/Bg/qz0orFMfPBg/oz0Bk7aoP3bboZk+6YyrSnZ3DsCScB8PVvfYdllnG2eKu0ew+/I9ijrr3jtjN1muDp514BIKUF25dddhlWGdifvzz8FO/fYE3u+/Xbp789OekEpkx9iJ0/c0o7SpXo378/55x1Bh8ctgW77/WJqsvp1dod+P8qr9cCHq1pH1Jev9recnqnx556gceeeoFP7PQBLrz2j2+27/+xLenTZ1muvOnPfP2HVyxwn498eCO+Mm4ndv3cqbz0Sv0HMKl1Lr/0IqY98jCnXH9z1aX0eu0O/IeA2cDWwC017R8EZqeUXm5zPb3WhNN+w8+OOYhLTv4sv73tr2w4dDXGjxnOH++fzvfOvp5Ut/u/xjsHATDprgcqqFa5mjdvHicc811G7bY722w7vOpyer22Bn5K6d8RcQNwSEScnFKaExF9gH1Z8A1Ai+nC66byymtzOPzgj3DMl/Zk3vzXufzGe/jqDy57W9hLVTnv/87miccf45eXOjW4HaLd//kjYmuKaZlXA2cAXwB2B/ZMKV3V1f2WWfGdafkNx7SnSKmHnrzt5KpLkBYwcvhW3Hv3n+qPkwLtH9IhpXRnRBwMnAnsAbwBHNVd2EuSFl/bAx8gpXRBRFwHbAk8lFJ6uIo6JCknlQQ+QErpBeC6qrYvSbnxGw6SlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpSJ5bpaEBFrN7qylNLji1eOJKlVugx8YDqQerieKPsuu7gFSZJao7vA36FtVUiSWq7LwE8p3dLOQiRJreVBW0nKhIEvSZkw8CUpEw0FfkQcFBF3RsRLEbFDRGwVEdMiYnyrCpQkNUePAz8iDgYmUky9HEAxFfNJ4AHgjIg4pBUFSpKao5E9/K8C5wK7UIQ9KaV/ppRGle1HNL88SVKzNBL46wK3d7FsKjB0sauRJLVMI4H/EDCsi2UfL5dLkpZQ3X3Ttt4xwIXAihSnUdg6ItYHxgA7AmObX54kqVl6HPgppUsiYgXgeIox/KPLRU8Dh6aULm5BfZKkJmlkD5+U0vkRcQGwITAYeAF4IKXU05OsSZIq0lDgA5Th/o8W1CJJaqFGv3i1TUT8OiKeiYi5EfF8RFwTEZ5ZU5KWcD3ew4+IjwFXAK8ANwLPUAzr7ATcGBF7p5R+3YoiJUmLr5EhnROAPwEjU0qvdTRGRD/gJuB7wK+bWp0kqWkaGdJZDzi/NuwBUkqzgQvwi1eStERrJPB/D2zfxbLhwD2LX44kqVW6+xHz7eqaJgI/jogbKPbonwbeSfGFqx2Bw1tUoySpCbobw59M8Y3aqGv/SHmpdzrw0+aUJUlqtu4Cf922VSFJarnufsT8sXYWIklqrYa+aRsRG1GM1w+pW9SPYrrmls0qTJLUXI188Wo08EtgNsUvXr0IvAqsBbwO/LEVBUqSmqORaZkTgMuAVYDfAFenlNalOID7OnBK06uTJDVNo1+8+l1K6Q3gBmA7gJTSZOAc4NtNr06S1DSNBP7TwOblv28H1omI1crb9wHvaWJdkqQma+Sg7VnA8RHxWkrpGxHxBHB2RJwPfA54uCUVSpKaopFfvDoxIt6g+HYtwHjgYuBjFAdyRze/PElSszT6i1c/qPn3DRGxFrAB8GhK6cVmFydJap6Gf/GqVkrpVYpTJkuSlnAN/eKVJGnpZeBLUia6Oz3y2o2uLKX0+OKVI0lqle7G8KdTnB65J6Lsu+ziFiRJao3uAn+HtlUhSWq57k6PfEs7C5EktdZiTctspw9svDa333Va1WVIC3ht7vyqS5B6zFk6kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJhoK/Ig4KCLujIiXImKHiNgqIqZFxPhWFShJao4eB35EHAxMpDjn/QCKc+A/CTwAnBERh7SiQElSczSyh/9V4FxgF4qwJ6X0z5TSqLL9iOaXJ0lqlkYCf13g9i6WTQWGLnY1kqSWaSTwHwKGdbHs4+VySdISqpEfQDkGuBBYkeL3a7eOiPWBMcCOwNjmlydJapYeB35K6ZKIWAE4nmIM/+hy0dPAoSmli1tQnySpSRr6icOU0vkRcQGwITAYeAF4IKWUWlGcJKl5Gv5N2zLc/9GCWiRJLdTjwI+IaRRj911KKa232BVJklqikT38n7Ng4A8ANgZ2Bv4OXNrEuiRJTdbIQdsJnbVHxMYUYT+tSTVJklpgsU+ellL6OzAO+OZiVyNJaplmnS1zLrBGk9YlSWqBRg7aHtTFoncBnwXubkpFkqSWaOSg7cQu2mcBdwKfX+xqJEkt08hBW38sRZKWYoa4JGWikR9AGRARy7eyGElS6zSyhz8N+HGrCpEktVYjgX8nsEGrCpEktVYjgf9tYIuI2L9VxUiSWqeRaZkDgf8FfhoRewD/B8yu7ZBSmtLE2iRJTdRI4E+mOHlaAPuUl1oJWLY5ZUmSmq2RwF+3ZVVIklqukS9ePdbKQiRJreUXryQpE10GfkS8HhH7tbMYSVLrdLeHH22rQpLUcgsbwx8cEWv3dGUppccXsx5JUossLPBPLi895bRMSVpCLSzwzwf+2I5CJEmttbDAvyGl9Mu2VCJJaimnZUpSJrrbw98B+Hu7CpEktVaXgZ9SuqWdhUiSWsshHUnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwM/QDb+9nn59gksvubjqUpSxuXPn8r2jJzBs0w1ZY/BK7DJyOLffOqXqsnq1ygI/IlaNiCciYkRVNeRo1qxZfPmwLzBihx3Ze58xVZejjH364P047eQf8PHRYzj2xB8yb948Ru++M7dMuqnq0nqt5arYaET0Ay4G1qxi+zk75qgJ/PPJJ7niymuqLkUZu23KLVx39VWc/JOfcsDBhwKwzyf3Z9stNuO4o/6X7XcYWXGFvVPb9/AjYjBwE7BBu7edu/vvu49TT/kRh335cDbaeOOqy1HGbp18M3379mX0mLFvtvXv35/tdxzJX++/r8LKercqhnQOAOYDe1Sw7WyllPji58ez0korsc1/bsv1113LCy+8UHVZytSrr77CCv360a9fvwXa58yeTb8VV6yoqt6visC/CtgBMG3a6Bfnn8cf/3AXL730Ep/7zKGMHTOaDddfh1/98hdVl6YMDV13PV55+WX++pe39uZnzpzJlEk3s+WHt6mwst6t7YGfUpqWUnq93dvNWUqJ4449ij59+nDFVdfwxNPP8fhTz/Kx3ffkM4cezD133111icrM6DFjWXmVVRg/7kBuv3UKd0/9AweP3Ztnn32G/Q8cV3V5vdYSPS0zIsZHxNSImPrc889VXc5S68EHHmDao4+y/wEHMWqXXQEYMGAAP/7JGbzxxhtcfNGvKq5QuRk8ZAhXXHMDffv2Yc9dRvLREf/JLZNuYsONNmHUbrtXXV6vtUQHfkrprJTSsJTSsFWHrFp1OUutGTNmADB8u+0XaB84cCCrrroqTz31zyrKUubet+lmTLpjKtOensGxJ5wEwNe/9R2WWWaJjqWlms9sBlZffXUAImKB9vnz5zNjxgyG+GaqCvXv359zzjqDDw7bgt33+kTV5fRqBn4Ghq67Lmuvsw6XX3bJAu2/OP885s+fz4gddqyoMgkuv/Qipj3yMBOOOaHqUnq9Sr54pfabcNSxfGrcgez98T3YedSuPPDAPzjrzNMZtsWW7PYxx0xVjXnz5nHCMd9l1G67s822w6sup9cz8DMxdr/9GThwID866ft868iv0adPHz4xeh9OPOlHjpmqMuf939k88fhj/PLSK6suJQuRUqpmwxFDgWnADimlyQvr/6EPDUu33zW11WVJDXlt7vyqS5AWMHL4Vtx795+is2WV7eGnlKYDnRYlSWo+P8tLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZkw8CUpEwa+JGXCwJekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRlwsCXpEwY+JKUCQNfkjJh4EtSJgx8ScqEgS9JmTDwJSkTBr4kZcLAl6RMGPiSlAkDX5IyYeBLUiYMfEnKhIEvSZmIlFLVNfRIRDwHPFZ1Hb3EEOD5qouQ6vh32RzrpJRW7WzBUhP4ap6ImJpSGlZ1HVIt/y5bzyEdScqEgS9JmTDw83RW1QVInfDvssUcw5ekTLiHL0mZMPAlVS4iVo2IJyJiRNW19GYGfkYiYkRETI2IWRExJSLWr7omKSL6ARcDa1ZdS29n4GciIrYArgeWB44EEnBtRCxfaWHKWkQMBm4CNqi6lhwY+Pn4PvASsH1K6WRgV2AgML7CmqQDgPnAHlUXkgMDPwMRsTIwHDg3pTQDIKX0GnAhsGeVtSl7VwE7AC9UXUgODPw8bEzxWt9W134fsFn7y5EKKaVpKaXXq64jFwZ+HgaV19Pr2p8DhkTECm2tRlIlDPw8RHk9q659Tnk9oI21SKqIgZ+HjmCPuvaO287UkTJg4OfhX+X1WnXtQ8rrV9tYi6SKGPh5eAiYDWxd1/5BYHZK6eX2lySp3Qz8DKSU/g3cABzScYA2IvoA+wK3VFmbpPYx8PNxAvAe4KKIGAVcRjHEc0alVUlqG0+PnJGIOAA4E+gPvAEck1L6TrVVSWoXAz8z5blLtgQeSik9XHU9ktrHwJekTDiGL0mZMPAlKRMGviRlwsBXQyJiaESkmsvrETE9Ir4ZEW35e4qIiRExuZP2cRGxRB6U6qrmHt53RPlcD12E+3a8XiMWZdvNrkfVWq7qArTUuhq4CFgJ2A44umw/trKKYApw4OKsICIGAf8PmJhSmr74JUlLDgNfi+qvKaULyn+fGRGvAl+PiO+X3+xtu5TSo8Cji7maQcB3gMm8/XTS0lLNIR01yySKvf31qi5EUucMfDVLx159P1hw7DgiNo+I30TEjIh4R+2dImKfiLgvImZHxN8iYlzd8r4R8aOIeCEiXoyI43n7aZ47+nY7hh8R4yPiwYiYFRF/jogxNcsmlPedVjZNqjlOMbRVNS+uKHw1Ih4pH9dfImLvTroOjYjJETGnrHn3TtbV7ePS0s/AV7P8B5CA+m/vfgi4neIH0y/nrTcGIuJAiuMAdwKHAXcB59YFzekUY+qXABOAvYFPNFpcRHwV+CnFzzoeThHsF0VEx49nX04x/n94efu48vaBFL8M1vaae+i/Kc6TdD3wJeAvwK8iYpO6fqcCzwNHADOBKyJi246FPXxcWtqllLx46fEFGEoR7KdQnE9/HeAg4EXg5530mwUc1Ml6lgGeAs4r19Nx+SNwV9lnNWA+cHbN/dYD5gGTO1nnuOJP+m3tg4DXgIvrtj8duKqLxzeiHTX38DkfUdY0tJNl3wdOrLm9LPAy8F91j+emmj4rATM6HntPHldP6/GyZF88aKtF9aXy0mEKxd5mvWtTSud10r4hsDpv7UXXmlleb0ERYJd1LEgpPRoRdzRY64eBFYGf16znDYowbEQ7a+6RlNIR5bDOZsC2wEcpPk0Nqet6fs19ZkbEjcCOZVNPHpd6AQNfi+pC4GcUZ918MqX0YBf9ftZF++Dy+jtAfRh2jMMPKq+frVv+FEVA9VTHtv7Vba+er6cdNfdIRHwUOBtYG3iM4o33xU66Pl13+xneqrUnj0u9gIGvRfVYSul3Peg3u4v2F8rrZ2rXExFrAmuWX+Lq+OnFwXX3fWdDlRbDFwDvqm2MiEOA7VJKh/RwPe2seaEiYiDFcYLbgK1TSk+V7dM76V6//cG8VetCH1f5iUhLOQ/aqioPUOx1jomI2hks5wAXlQHzJ4o9zD07FkbEWhRDF424k+KNp3644nMUQzC1Ot4cBlRcc09sQDF8c15N2I/g7b9dDDC2pp5+wE7AH8qmnjwu9QLu4asSKaU3IuJI4FzgtxFxBcWMnp2BL5R9noyIXwFfKHPoQeCLFMNIjWzrpYg4Gjiu3Au/mSLwtqTuTSCl9EpE3AVMiIjVKIJ/zZTSf7ez5h56lOKN7Gvl3v6mwGfKbfWr67tjRFwI3ArsTzHG/4Oy5oU+LvUSVR819rJ0XXhr1sfxPew3YiH9PgncD8wB/gF8um55P+AnFOPSL5f/Pp8GZunULP8cxbTRWRR74nt10W89it8Afg14BfhRq2ru4XM+gq5n6exKMRVzTnm9L8U4/NS61+HzwO+BuRR79KMbfS16Uo+XJfviD6BIUiYcw5ekTBj4kpQJA1+SMmHgS1ImDHxJyoSBL0mZMPAlKRMGviRl4v8D7N4qafzVozsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 648x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "source": [
    "from sklearn.metrics import ConfusionMatrixDisplay\r\n",
    "\r\n",
    "ConfusionMatrixDisplay(cm).plot(cmap=plt.cm.Blues, colorbar=False)\r\n",
    "\r\n"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x219dcc0ce50>"
      ]
     },
     "metadata": {},
     "execution_count": 123
    },
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.5 绘制graphviz"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "source": [
    "import graphviz\r\n",
    "\r\n",
    "dot_data = tree.export_graphviz(\r\n",
    "    clf,\r\n",
    "    out_file=None,\r\n",
    "    feature_names=feature_name,\r\n",
    "    class_names=[\"不是窃漏电\", \"是窃漏电\"],\r\n",
    "    filled=True,\r\n",
    "    rounded=True,\r\n",
    "    special_characters=True,\r\n",
    ")\r\n",
    "graph = graphviz.Source(dot_data)\r\n",
    "graph\r\n"
   ],
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Generated by graphviz version 2.49.0 (20210828.1703)\r\n -->\r\n<!-- Title: Tree Pages: 1 -->\r\n<svg width=\"652pt\" height=\"314pt\"\r\n viewBox=\"0.00 0.00 652.00 314.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 310)\">\r\n<title>Tree</title>\r\n<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-310 648,-310 648,4 -4,4\"/>\r\n<!-- 0 -->\r\n<g id=\"node1\" class=\"node\">\r\n<title>0</title>\r\n<path fill=\"#fdf7f3\" stroke=\"black\" d=\"M404,-306C404,-306 238,-306 238,-306 232,-306 226,-300 226,-294 226,-294 226,-235 226,-235 226,-229 232,-223 238,-223 238,-223 404,-223 404,-223 410,-223 416,-229 416,-235 416,-235 416,-294 416,-294 416,-300 410,-306 404,-306\"/>\r\n<text text-anchor=\"start\" x=\"234\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">电量趋势下降指标 ≤ 4.5</text>\r\n<text text-anchor=\"start\" x=\"271\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.999</text>\r\n<text text-anchor=\"start\" x=\"273.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 203</text>\r\n<text text-anchor=\"start\" x=\"252\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [23.14, 21.75]</text>\r\n<text text-anchor=\"start\" x=\"253\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 不是窃漏电</text>\r\n</g>\r\n<!-- 1 -->\r\n<g id=\"node2\" class=\"node\">\r\n<title>1</title>\r\n<path fill=\"#edaa7a\" stroke=\"black\" d=\"M302,-187C302,-187 174,-187 174,-187 168,-187 162,-181 162,-175 162,-175 162,-116 162,-116 162,-110 168,-104 174,-104 174,-104 302,-104 302,-104 308,-104 314,-110 314,-116 314,-116 314,-175 314,-175 314,-181 308,-187 302,-187\"/>\r\n<text text-anchor=\"start\" x=\"177\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">告警类指标 ≤ 2.5</text>\r\n<text text-anchor=\"start\" x=\"188\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.805</text>\r\n<text text-anchor=\"start\" x=\"190.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 172</text>\r\n<text text-anchor=\"start\" x=\"173\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [21.32, 6.96]</text>\r\n<text text-anchor=\"start\" x=\"170\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 不是窃漏电</text>\r\n</g>\r\n<!-- 0&#45;&gt;1 -->\r\n<g id=\"edge1\" class=\"edge\">\r\n<title>0&#45;&gt;1</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M292.2,-222.91C285.89,-214.01 279.15,-204.51 272.64,-195.33\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"275.39,-193.15 266.75,-187.02 269.68,-197.2 275.39,-193.15\"/>\r\n<text text-anchor=\"middle\" x=\"262.56\" y=\"-207.97\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">True</text>\r\n</g>\r\n<!-- 4 -->\r\n<g id=\"node5\" class=\"node\">\r\n<title>4</title>\r\n<path fill=\"#51a9e8\" stroke=\"black\" d=\"M466,-187C466,-187 344,-187 344,-187 338,-187 332,-181 332,-175 332,-175 332,-116 332,-116 332,-110 338,-104 344,-104 344,-104 466,-104 466,-104 472,-104 478,-110 478,-116 478,-116 478,-175 478,-175 478,-181 472,-187 466,-187\"/>\r\n<text text-anchor=\"start\" x=\"344\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">告警类指标 ≤ 0.5</text>\r\n<text text-anchor=\"start\" x=\"355\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.499</text>\r\n<text text-anchor=\"start\" x=\"361.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 31</text>\r\n<text text-anchor=\"start\" x=\"340\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [1.82, 14.79]</text>\r\n<text text-anchor=\"start\" x=\"346\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 是窃漏电</text>\r\n</g>\r\n<!-- 0&#45;&gt;4 -->\r\n<g id=\"edge4\" class=\"edge\">\r\n<title>0&#45;&gt;4</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M350.14,-222.91C356.53,-214.01 363.35,-204.51 369.94,-195.33\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"372.92,-197.19 375.91,-187.02 367.23,-193.1 372.92,-197.19\"/>\r\n<text text-anchor=\"middle\" x=\"379.96\" y=\"-207.99\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">False</text>\r\n</g>\r\n<!-- 2 -->\r\n<g id=\"node3\" class=\"node\">\r\n<title>2</title>\r\n<path fill=\"#e89152\" stroke=\"black\" d=\"M140,-68C140,-68 12,-68 12,-68 6,-68 0,-62 0,-56 0,-56 0,-12 0,-12 0,-6 6,0 12,0 12,0 140,0 140,0 146,0 152,-6 152,-12 152,-12 152,-56 152,-56 152,-62 146,-68 140,-68\"/>\r\n<text text-anchor=\"start\" x=\"26\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.504</text>\r\n<text text-anchor=\"start\" x=\"28.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 163</text>\r\n<text text-anchor=\"start\" x=\"15.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [20.8, 2.61]</text>\r\n<text text-anchor=\"start\" x=\"8\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 不是窃漏电</text>\r\n</g>\r\n<!-- 1&#45;&gt;2 -->\r\n<g id=\"edge2\" class=\"edge\">\r\n<title>1&#45;&gt;2</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M177.68,-103.73C163.16,-93.92 147.7,-83.46 133.33,-73.75\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"135.25,-70.83 125.01,-68.13 131.33,-76.62 135.25,-70.83\"/>\r\n</g>\r\n<!-- 3 -->\r\n<g id=\"node4\" class=\"node\">\r\n<title>3</title>\r\n<path fill=\"#51a9e8\" stroke=\"black\" d=\"M295.5,-68C295.5,-68 182.5,-68 182.5,-68 176.5,-68 170.5,-62 170.5,-56 170.5,-56 170.5,-12 170.5,-12 170.5,-6 176.5,0 182.5,0 182.5,0 295.5,0 295.5,0 301.5,0 307.5,-6 307.5,-12 307.5,-12 307.5,-56 307.5,-56 307.5,-62 301.5,-68 295.5,-68\"/>\r\n<text text-anchor=\"start\" x=\"193\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.49</text>\r\n<text text-anchor=\"start\" x=\"199.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 9</text>\r\n<text text-anchor=\"start\" x=\"178.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [0.52, 4.35]</text>\r\n<text text-anchor=\"start\" x=\"180\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 是窃漏电</text>\r\n</g>\r\n<!-- 1&#45;&gt;3 -->\r\n<g id=\"edge3\" class=\"edge\">\r\n<title>1&#45;&gt;3</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M238.37,-103.73C238.45,-95.52 238.53,-86.86 238.6,-78.56\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"242.1,-78.33 238.7,-68.3 235.1,-78.27 242.1,-78.33\"/>\r\n</g>\r\n<!-- 5 -->\r\n<g id=\"node6\" class=\"node\">\r\n<title>5</title>\r\n<path fill=\"#fbeadf\" stroke=\"black\" d=\"M468,-68C468,-68 340,-68 340,-68 334,-68 328,-62 328,-56 328,-56 328,-12 328,-12 328,-6 334,0 340,0 340,0 468,0 468,0 474,0 480,-6 480,-12 480,-12 480,-56 480,-56 480,-62 474,-68 468,-68\"/>\r\n<text text-anchor=\"start\" x=\"354\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.994</text>\r\n<text text-anchor=\"start\" x=\"364.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 9</text>\r\n<text text-anchor=\"start\" x=\"343.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [1.04, 0.87]</text>\r\n<text text-anchor=\"start\" x=\"336\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 不是窃漏电</text>\r\n</g>\r\n<!-- 4&#45;&gt;5 -->\r\n<g id=\"edge5\" class=\"edge\">\r\n<title>4&#45;&gt;5</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M404.63,-103.73C404.55,-95.52 404.47,-86.86 404.4,-78.56\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"407.9,-78.27 404.3,-68.3 400.9,-78.33 407.9,-78.27\"/>\r\n</g>\r\n<!-- 6 -->\r\n<g id=\"node7\" class=\"node\">\r\n<title>6</title>\r\n<path fill=\"#44a2e6\" stroke=\"black\" d=\"M632,-68C632,-68 510,-68 510,-68 504,-68 498,-62 498,-56 498,-56 498,-12 498,-12 498,-6 504,0 510,0 510,0 632,0 632,0 638,0 644,-6 644,-12 644,-12 644,-56 644,-56 644,-62 638,-68 632,-68\"/>\r\n<text text-anchor=\"start\" x=\"521\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">entropy = 0.299</text>\r\n<text text-anchor=\"start\" x=\"527.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 22</text>\r\n<text text-anchor=\"start\" x=\"506\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [0.78, 13.92]</text>\r\n<text text-anchor=\"start\" x=\"512\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 是窃漏电</text>\r\n</g>\r\n<!-- 4&#45;&gt;6 -->\r\n<g id=\"edge6\" class=\"edge\">\r\n<title>4&#45;&gt;6</title>\r\n<path fill=\"none\" stroke=\"black\" d=\"M466.81,-103.73C481.68,-93.92 497.53,-83.46 512.26,-73.75\"/>\r\n<polygon fill=\"black\" stroke=\"black\" points=\"514.36,-76.55 520.78,-68.13 510.51,-70.71 514.36,-76.55\"/>\r\n</g>\r\n</g>\r\n</svg>\r\n",
      "text/plain": [
       "<graphviz.files.Source at 0x219dcbc9af0>"
      ]
     },
     "metadata": {},
     "execution_count": 124
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### 2.6 绘制ROC"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "source": [
    "plt.figure(figsize=(9, 6))\r\n",
    "display = metrics.plot_roc_curve(clf, X_test, y_test,ax=plt.gca())\r\n",
    "plt.show()\r\n"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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93m1OkMjN33uStrmNWOXbm2zHUpOUtWgiEhui+N7Xo2LM2xGUTF79+5I0yb6URYREckGJTsZtPLbjcxeulZVWCIi9UxZWVm2Q2h0snnNlexkUKK9zjANJigiUm+UlJQwfPhwvvzyy2yH0mjcddddXHfddVk7v5KdDCosKqZFsyYM7tE+26GIiEho1KhRdO3alb591f+mrhx77LE88MADPP/881k5v5KdDCosWsmQHu1p2axptkORBmzq1KmYGWZGXl4eAwYM4Fe/+hXLly/P6HkfeeSRWBoGxlVOVSpen8qWbPn00085+OCDadWqFb169WLcuHGV7peIv6ioqG4DrEKU92v58uX85Cc/oWPHjuTn5/P9738/rXKyYdKkSXz44Yc88cQTNGmy9U/gAw88gJkxefLkrdYn3qOXX355q/U33XQTZsbatd+Nuxv1fa8rU6dOpaCggFatWnHAAQekfDcr8T5WtSQ+t6tWreLiiy+mR48e5Ofnc9hhh/Hhhx+WlzNgwAAef/xxfvGLX7Bu3bo4X2IkUcfZkRSt27iZjxetZswBO2U7FMkRl112GQMGDOD111/n7rvv5oUXXuC9997L2KCKBxxwAI899li9Kacqu+22W3n5U6ZM4W9/+xu///3vszrY5Pz58znggANo27Ytd955J7Nnz+aKK64A4PLLL89aXFFEeb9+9atf8eabb3LbbbfRrFkz3n333bTKqWtbtmzhqquuYty4cbRp02ab7VOmTCl/PPTQQ1Muv76974WFhRx++OHsvPPO3H777UyaNIkjjzySWbNmRR6NuKr38bnnnuO1116jS5cubNq0iUMOOYQ5c+Zw5ZVX0rZtW/7whz+w//7788477zBoUDAm8RFHHMHQoUO5++67ueaaa2J9rTVy90a57L333p5J02Yv895Xvez/+fybjJ6nMfv000+zHUKdeP311x3wl156qXzdvffe64BfdNFFWYys/vnjH//ogM+dOzercZxxxhnevHlznz17dvm6008/3Tt27OgbNmzYat/E+5vtmFOx8847+zXXXJPtMFI2depUHzhwYKXbtmzZ4h07dnTAhwwZstW2yv4PurvfeOONDnhJSYm7p/a+V6WkpMSXLVtW5VJaWhr59R544IHetWtXX7Fihbu7r1271rt16+Z/+MMfIpdRmdLSUu/Ro4ffdNNN7u4+fvx4B/zf//53+T6LFy/2Nm3a+CmnnLLVsYWFhd6vX7+Uzxnl+x6Y4VX85qsaK0OmFxVjBnv37pjtUCQHXXDBBXTv3p2JEydmOxRJsnHjRp577jkOPvhg+vfvX77+8MMPZ+XKlXz88cdZjC4eGzdubJADer744ouceOKJlW6bMWMGK1eu5IwzzmDWrFksXbo0pbLjet8vvPBCtttuuyqXJ598MlI5K1eu5M0332T06NF06hR0kmndujU/+clPeOGFF1J6bckefPBB1q1bx6WXXgrAa6+9Rs+ePfnhD39Yvk+3bt3Yd999t6rKAigoKGDTpk188skntYohVUp2MmRG0Up27daOdnkN7wtB6r8mTZqw33778c0337B48eLy9U8//TSDBw8mPz+f3XffnUceeWSbYx988EEGDBhAq1atGDJkCE899VSl56ipzcW4cePo378/+fn57Lrrrvz1r39Nq5zx48ez6667kpeXx5577sk///nPrbabGQ8//DB///vf6d+/P23atOFHP/oRy5Ytq7LMyhQVFWFmTJ06lQ8++ICjjz6aTp06sXr16q32i3INq9vn008/Ze3atey1115bHTNo0CBOOeUUmjWL3nrA3Rk7diz9+vWjVatWDBo0iGeeeWab/aK8F7V9vyq2jZo3bx4333xz+fPKrlFN73tN1znq+5WKjz/+mH333bfSbZMnT6Z58+ZccskluHt5lVZUcb3vV155JVOmTKlyOeywwyKV89lnn1FWVsb++++/1frBgwdvk4CkYvPmzYwdO5aLL76Ydu3aAbBmzRo6d+68zb7r16+nVatW26zfd9996zzpT6vNjpmdAVwA7AYcD6wDJgC/cfcH4wuvYdq8pYz356/kpL17ZDuURunmlz7h06/XZDuMrey+YztuPHpgrGX26tULgK+//poddtiBxx57jFGjRnHuuedy0UUXMW3aNEaPHg3AmWeeCcDYsWO56qqrOPHEE7nssst45ZVXOOWUU8jLy+OYY46JfO6HHnqIK664grPPPpvhw4fz5ptvcvbZZ7PTTjsxYsSIyOXcc889XHLJJRx77LH88pe/ZOLEiRx99NFMmjRpq3heeOEF3n33Xa688kpWrFjBuHHjuO6663jggQcinyth5syZ3HDDDRQUFHDCCSfQokWL8m1RrmFN+8ybFww6v+OOO2513sGDBzNhwoSUYv3tb3/LVVddxc9//nP23HNP/v3vf3Pqqaey++67s/vuuwPR3os43q+KbaMuvfRSfvCDH3DCCScAVNpAuTpRrnNCde9Xqr755psq51eaMmUKe+65J3vssQedO3dmypQp/OxnP4tcdlzve8X3tjZWrVoFsM38gdtttx3Lly+ntLSUvLy8lMudNGkS33zzDWPGjClf169fP1599VWWL19e3lZuwYIFzJw5k3PPPXebMrp168aSJUtSPndtpJzsmNkoYDwwA2gLGLAQ+AK4z8w2ufv4WKNsYD75eg3rNm5hqMbXkQzKz88Hgr+eysrKuOqqqzjttNO47bbbADjuuOP4+OOPue+++zjzzDNZtWoVN998MyeddFL53Zxzzz2XnXbaiYcffjilZGfatGl06tSJhx9+GICzzjqL9u3bs3HjxshllJSUcN1113HccccxadIkAM4//3wKCgq45JJLOProo8vvDPzzn/+ksLCw/K/mL7/8kmnTpkU+V0XXX389999/P2ecccZW66Ncwyj7JHrmpPNDkuybb77hiiuuYOzYsQCMHj2aV155hf/85z/lP4hR3os43q+uXbty2mmnAXDdddcxePDg8uepiHINK6rq/UpHaWlp+f+bitauXcs777zDhRdeiJkxfPjwlO/sxPm+xyFowsI2d1YS8ZWUlKQV67333suJJ55It27dytedc8453HfffRx//PH87ne/K6/iKi0tLU9iK8rPz6e0tDTlc9dGOnd2riRIdq4ElgG4+yLgcDN7GLgi3N5oafLP7Ir7Dkp9lfiyaNWqFV988QWLFy/mscce26bnRKLXybvvvsu6desYNWpU+bYmTZqk1eV52LBhPProo1x99dWccMIJDBkyhHvuuSelMt5++23Wrl3LWWedVb6uadOmjB49mosvvpg5c+aw8847A3DCCSdsVT2w2267UVhYmHLcAEceeWSlP5xRrmGUfRLdmZMnLly7di1z5syhX79+tG0bba68u+66C3fnww8/5K233mLy5MmsWbNmq2EHorwXcbxfcYlyDSuq6v1Kx/bbb8+SJUvYZZddtlr/3//+l02bNjFw4ECWL1/O4MGDefnll/n0008j32WJ631fvXo169evr3J7+/btK03YkiUSmUTSk5B4vmHDhhrLSDZ79mzeeOONbbrm77777rz88sucf/75DBs2rHz94Ycfzp577rlNOZW9B5mWTrLTF/htFdtmAD9NP5zcUFhUTK9Orejarn5k+JKbFi1aBAS3zefMmQPAzTffvE2VQuLuyIoVKwC2+ossXWPGjGH58uU8+uij3HHHHbRq1YpTTz2Ve+65h9atW0cqI/GDnVytkKgGWLp0aXmyM3To0K32SR4fJRVnn312pesT1yfKNaxun0TbhcS+CdOmTePwww/ntddeY+TIkZFinTx5Mueeey7z58+nd+/eHHDAAXTsuHWnhyjvRRzvV1yiXMOKqnq/0tGzZ0/mzJnDgQceuNX6xI/3OeecwznnnLPV+qjJTlzv+8UXX8yjjz5a5fbx48dvc/erMon/5wsWLGCnnb4bAiXx/y5qwl3RxIkT6dixIwcddNA22374wx8ye/ZsVq1axa233spvf/tbbrnllkrLmTNnDqeffnrK56+NdJKd2UABUFlz7uPD7Y2WuzOjaCUjdtk+26FIjnv77bfp2bMn3bp1Y+XKlUBQ1XDwwQeX77Nw4UIWLlxIWVlZeY+M5Lry8ePH88YbbzB+fPQbss2aNeOGG27ghhtuYPHixTz55JNcfvnldOvWjVtvvTVSGYm6/YoNrCFogwRB24KEROxxqOqv4sSPVXXXMMo+iTFFPvroo63KX7hwIbBtcleVNWvWcNJJJ5WPVZJIApPbYER5L+J4v+IS5RpWTGaj3MWI6tBDD+XZZ5/dJoGaMmUKAwYM4E9/+lP5uh//+MdMmTKFSy65hPbtg1HwKw4emHjevHlz8vPzY3vfr7zyymqrBwcOjHbneueddyY/P5933nlnq+Tu/fffJz8/v/w1pWLixIkcc8wx1Ta2btKkCX/5y1846aSTKCgo2Gb7smXL+Oijj9hvv/1SPn+tVNUnvaoFOAnYAjwSPl4LnAtMCZ+fHLGcEQR3gtYBbwD90ojlx8CnYRkvAttFPTZT4+zM/qbEe1/1sk+YPi8j5ct3GvM4Ow8//LADfsMNN7h7MEbIDjvs4CNHjvSysrLy/Q477DDv1auXu7uvXLnS8/Pztxn3YtiwYZWOPZIYO6MyRx99tF977bVbrevfv78fddRRkctZs2aNt2nTxo877rjydZs3b/Y99tjD+/btW/46AH/ooYe2OvbGG2/03r17b1NmdePszJ071wF//fXXK31NUa5hlH3c3ffdd19v27atL1mypHzd0Ucf7dtvv71v3rx5q/NWNc5OYWGhAz5hwoSt9m3SpInfeOONW5Vb03sRx/tVUe/evbeKoTJVlRP1Gtb0fqVj+fLl3q5dO58377vv54ULFzrgF1988Vb7HnPMMd66dWvfsGGDr1692ps2bernn3/+VvsMHTrUd9111/LnqbzvdeHYY4/1AQMG+Pr1693dfePGjd6zZ08//PDDUy4r8X48+eST1e532223bTPWUEV33HHHNt9BUdR2nJ2U7+y4+9NmlgfcQdA4OXGfajFwlrtX3o+1AjMbCrxKcBfoGoI7Qv80s8HuHqki0cyOBZ4CpgEPAKOBpwmSqKyZofY6kiFTp05l8eLFvPHGGzzxxBPss88+XH311UDw19Ttt9/O6NGjOeywwzj++OOZOXMm//rXv/jzn/8MQIcOHbj++uu55pprKCsrY+TIkUyZMoXp06enPNLtHnvswdixY9myZQs777wz06dPZ86cOSlVObRt25Zbb72VSy65hOOOO45DDjmEiRMnMmvWLCZNmlTnUw1EuYZR9gH4/e9/z4gRIxg5ciQXXnghb7zxBi+99BK/+93vaNo02vQxO+20E/n5+dx5552sWbOGjz76iIceeogmTZps1aYjynsRx/sVl6jXMBM6d+7Meeedx2WXXcbTTz8NfDdqcsW7TInnL774YvmdkVGjRvHggw/i7uy555784x//oLCwMPb3PU5XXXUV+++/P6eccgoXXHABf/7zn1mwYAH33ntv+T7vvPMOixYt4sc//nG1Zf3nP/8Bqu95V1xczNixY7ngggu2GmsoYcmSJdx55528+eabab6iWqgqC6ppIUh0dgX2Cx8thWOnAkuATuHz1gTJ0i9TOPdXwCwgL1y3I1AKHB2ljEzd2bl04v9871smb/UXi2RGY7uzA3jLli19991391tuucXXrVu3zb5PPvmkDxo0yFu2bOm77LLLNndE3N3vu+8+79evn+fn5/tee+3lkyZNqvS81f2Fv2nTJr/pppu8f//+npeX5z179vRrr7220r9ea7pT8Ne//tUHDBjgLVq08CFDhvg//vGPrbZTR3d2EqJcwyj7TJs2zffbbz9v2bKl9+rVy+++++5Kz1fdCMr/+Mc/fODAgd6yZUsfOHCgT5gwwYcPH+4Vv7+ivBdxvl/utbuzk1DTNczEnR1391WrVnn37t39gQcecHf3n/70p96sWTNf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",
      "text/plain": [
       "<Figure size 648x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  }
 ],
 "metadata": {
  "orig_nbformat": 4,
  "language_info": {
   "name": "python",
   "version": "3.8.11",
   "mimetype": "text/x-python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "pygments_lexer": "ipython3",
   "nbconvert_exporter": "python",
   "file_extension": ".py"
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3.8.11 64-bit ('ml': conda)"
  },
  "interpreter": {
   "hash": "88c4a1b83521bb67c2a704a59fd8d4fbc808906c2f39c8cdcdb8c42e25302470"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}